#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10;

int n;
int a[N];

//冒泡排序
//1)执行 n - 1 趟操作
//2)每趟从前往后比较待排序区间的相邻元素，如果逆序，就交换。 
//3)每趟结束之后，就会有一个较大元素在最终的位置上

//优化：
//当某一趟冒泡操作中，没有执行元素的交换操作时，整个序列就是有序的了
//没有必要再继续执行冒泡排序算法了
void bubble_sort()
{
	//依次枚举待排序区间的最后一个元素
	for(int i = n; i > 1; i--)
	{
		bool flag = false;
		//[1,i] 就是待排序区间
		for(int j = 1; j < i; j++)
		{
			if(a[j] > a[j + 1])	
			{
				swap(a[j], a[j + 1]);
				flag = true;
			}
		}	

		if(flag == false) return;
	} 
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];	
	
	bubble_sort();
	
	for(int i = 1; i <= n; i++) cout << a[i] << " ";	
	
	return 0;
}
